package br.edu.universo.si.projeto2.infojob.client.apresentacao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanProfissionalCurriculo;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ErrorDialogBox;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.InformationDialogBox;
import br.edu.universo.si.projeto2.infojob.client.util.Util;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.SourcesTableEvents;
import com.google.gwt.user.client.ui.TableListener;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class ACurriculosByEmpresa extends DockPanel {

	private static int pastRow = -1;
	private static FlexTable resultadoGrid;
	private static List<BeanProfissionalCurriculo> listCurriculo = new ArrayList<BeanProfissionalCurriculo>();
	private BeanProfissionalCurriculo bprofissionalCur;
	private Button btnVerdetalhes;
	private Button btnRefreshGrid;
	private Integer row = 3;
	private static int idprofassinante;
	private Integer linhaSelecionada;

	public ACurriculosByEmpresa(Integer idProfissionalAssinante) {

		VerticalPanel vp = new VerticalPanel();

		idprofassinante = idProfissionalAssinante;
		btnVerdetalhes = new Button("Detalhes");
		btnRefreshGrid = new Button("Refresh");
		btnRefreshGrid.setVisible(false);

		resultadoGrid = new FlexTable();
		resultadoGrid.setCellPadding(7);
		resultadoGrid.setCellSpacing(0);
		resultadoGrid.setWidth("900px");

		setarEstiloGrid();

		// COLUNAS DA GRID
		resultadoGrid.setWidget(0, 0, new HTML("ID"));
		resultadoGrid.setWidget(0, 1, new HTML("Data Criação"));
		resultadoGrid.setWidget(0, 2, new HTML("Data Ultima Atualização"));
		resultadoGrid.setWidget(0, 3, new HTML("Comentario"));
		resultadoGrid.getFlexCellFormatter().setVisible(0, 0, false);
		carregarGridCurriculo();

		resultadoGrid.addTableListener(new TableListener() {
			public void onCellClicked(SourcesTableEvents sender, int row,
					int cell) {
              if(row <= listCurriculo.size() ) {
				setarEstiloLinhaSelecionada(row);
				setLinhaSelecionada(row);
				setBprofissionalCur(listCurriculo.get(row - 1));
				if (listCurriculo.size() > 0) {
					habilitarBotoes(true);
				} else {
					habilitarBotoes(false);
				}
              }
			}

		});

		btnVerdetalhes.addClickListener(new ClickListener() {
			public void onClick(Widget sender) {
				if (bprofissionalCur != null) {
					ADetalhesProfissionalCurriculo dProfCurso = new ADetalhesProfissionalCurriculo(
							bprofissionalCur);
					dProfCurso.center();
					dProfCurso.show();
				} else {
					InformationDialogBox informacao = new InformationDialogBox(
							"Selecione um item da lista");
					informacao.center();
					informacao.show();
				}
			}
		});
		vp.add(resultadoGrid);
		HorizontalPanel hpButton = new HorizontalPanel();
		hpButton.add(btnVerdetalhes);
		vp.add(hpButton);
        btnRefreshGrid.addClickListener(new ClickListener(){
        	public void onClick(Widget sender) {
        	   carregarGridCurriculo();	
        	}
        });
		
		this.add(vp, DockPanel.CENTER);
	}
	
	

	private void addContagem(int totalResultado) {
		resultadoGrid.setWidget(totalResultado + 1, 0, new HTML(
				"Total de curriculos encontrados: " + totalResultado));
		resultadoGrid.getFlexCellFormatter().setColSpan(totalResultado + 1, 0,
				3);
		resultadoGrid.getFlexCellFormatter().setAlignment(totalResultado + 1,
				0, HasHorizontalAlignment.ALIGN_RIGHT,
				HasVerticalAlignment.ALIGN_MIDDLE);
		resultadoGrid.getFlexCellFormatter().setStyleName(totalResultado + 1,
				0, "resultadoGridContagem");

	}

	private void setarEstiloGrid() {

		resultadoGrid.getFlexCellFormatter().setStyleName(0, 0,
				"resultadoGridCampos");
		resultadoGrid.getFlexCellFormatter().setStyleName(0, 1,
				"resultadoGridCampos");
		resultadoGrid.getFlexCellFormatter().setStyleName(0, 2,
				"resultadoGridCampos");
		resultadoGrid.getFlexCellFormatter().setStyleName(0, 3,
				"resultadoGridCampos");

		resultadoGrid.setStyleName("resultadoGrid");
	}

	private void setarEstiloLinhaSelecionada(int rowline) {

		if (pastRow != -1) {
			resultadoGrid.getFlexCellFormatter().setStyleName(pastRow, 0,
					"resultadoGridLinhaNaoSelecionada");
			resultadoGrid.getFlexCellFormatter().setStyleName(pastRow, 1,
					"resultadoGridLinhaNaoSelecionada");
			resultadoGrid.getFlexCellFormatter().setStyleName(pastRow, 2,
					"resultadoGridLinhaNaoSelecionada");
			resultadoGrid.getFlexCellFormatter().setStyleName(pastRow, 3,
					"resultadoGridLinhaNaoSelecionada");
		}
        if (rowline > 0){
        	resultadoGrid.getFlexCellFormatter().setStyleName(rowline, 0,
				"resultadoGridLinhaSelecionada");
        	resultadoGrid.getFlexCellFormatter().setStyleName(rowline, 1,
				"resultadoGridLinhaSelecionada");
        	resultadoGrid.getFlexCellFormatter().setStyleName(rowline, 2,
				"resultadoGridLinhaSelecionada");
        	resultadoGrid.getFlexCellFormatter().setStyleName(rowline, 3,
				"resultadoGridLinhaSelecionada");
        }
		pastRow = rowline;
	}

	public void carregarGridCurriculo()
	{
		listCurriculo.clear();

		AsyncCallback<ArrayList<BeanProfissionalCurriculo>> cbCurriculosProfissional = new AsyncCallback<ArrayList<BeanProfissionalCurriculo>>() {
			public void onSuccess(ArrayList<BeanProfissionalCurriculo> result)
			{

				int linha = 1;

				for (Iterator<BeanProfissionalCurriculo> iterator = result.iterator(); iterator.hasNext();)
				{
					BeanProfissionalCurriculo beanProfissionalCurriculo = (BeanProfissionalCurriculo) iterator.next();
					resultadoGrid.setWidget(linha, 0, new HTML(beanProfissionalCurriculo.getId() + ""));
					resultadoGrid.setWidget(linha, 1, new HTML(beanProfissionalCurriculo.getDataCriacao()));
					resultadoGrid.setWidget(linha, 2, new HTML(beanProfissionalCurriculo.getUltimaAtualizacao()));
					resultadoGrid.setWidget(linha, 3, new HTML(beanProfissionalCurriculo.getComentario()));

					listCurriculo.add(beanProfissionalCurriculo);

					// esconde o campo de id do curriculo profissional
					resultadoGrid.getFlexCellFormatter().setVisible(linha++, 0, false);
				}

				addContagem(listCurriculo.size());
				setRow(linha);
			}

			public void onFailure(Throwable caught)
			{
				ErrorDialogBox erro = new ErrorDialogBox("Erro ao buscar profissional curriculo: "+ caught.getMessage());
				erro.center();
				erro.show();
			}
		};

		Util.getService().getCurriculosByProfissional(idprofassinante, cbCurriculosProfissional); // nao precisa de ID pq ja pega na sessao
	}

	public void setBprofissionalCur(BeanProfissionalCurriculo bprofissionalCur)
	{
		this.bprofissionalCur = bprofissionalCur;
	}

	public BeanProfissionalCurriculo getBprofissionalCur() {

		return bprofissionalCur;
	}

	public void habilitarBotoes(Boolean value) {
		btnVerdetalhes.setEnabled(value);
	}

	public void setRow(Integer row) {
		this.row = row;
	}

	public Integer getRow() {

		return row;
	}

	public Button getBtnVerdetalhes() {

		return btnVerdetalhes;
	}

	public void setBtnVerdetalhes(Button btnVerdetalhes) {

		this.btnVerdetalhes = btnVerdetalhes;
	}

	public static int getIdprofissionalAssinante() {

		return idprofassinante;
	}

	public void setLinhaSelecionada(Integer linhaSelecionada) {
		this.linhaSelecionada = linhaSelecionada;
	}

	public Integer getLinhaSelecionada() {
		return linhaSelecionada;
	}



	public void setBtnRefreshGrid(Button btnRefreshGrid) {
		this.btnRefreshGrid = btnRefreshGrid;
	}



	public Button getBtnRefreshGrid() {
		return btnRefreshGrid;
	}

}
